using System.Reflection;

namespace UnitTesting.Fixturing
{
	class ArgumentService : IArgumentSpecifier, IArgumentProvider
	{
		readonly IArgumentSpecifier _argumentSpecifier;
		readonly IArgumentProvider _argumentProvider;

		internal ArgumentService(IValueProvider valueProvider)
		{
			_argumentSpecifier = new ArgumentSpecifier();
			_argumentProvider = new ArgumentProvider(valueProvider, (IArgumentProvider) _argumentSpecifier);
		}

		public void WithArgument(IArgument argument)
		{
			_argumentSpecifier.WithArgument(argument);
		}

		public object[] GetArguments(params ParameterInfo[] parameters)
		{
			return _argumentProvider.GetArguments(parameters);
		}
	}
}